//缓冲区机制，缓冲区



#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>

int main(int argc, char *argv[])
{
    //if(argc != 2) exit(1);

    ////追加的方式
    ////int fd = open("log.txt", O_CREAT | O_WRONLY | O_APPEND, 0666);
    //
    ////打开文件时，每次都清空式的进行输出重定向
    ////int fd = open("log.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);

    //int fd = open(argv[1], O_RDONLY);

    //if(fd < 0) exit(1);  //打开失败退出


    ////将1（stdout）的内容被覆盖成fd的
    ////dup2(fd, 1);

    ////把0（stdin）的内容覆盖成fd的
    //dup2(fd, 0);


    ////把fd的文件描述符对该文件的引用释放，
    ////关闭一个文件描述符会释放该进程对该文件的引用。
    ////如果这是指向该文件的最后一个文件描述符，则该文件将被关闭，
    ////并且相关的资源（如文件句柄、内存等）将被释放。
    ////如果还有其他文件描述符指向该文件，
    ////则关闭其中一个文件描述符不会影响文件的状态或内容。
    ////文件仍然保持打开状态，直到所有指向它的文件描述符都被关闭。
    //close(fd);

    ////输入重定向
    //while(1)
    //{
    //    char buffer[64];
    //    if(!fgets(buffer, sizeof(buffer), stdin)) break;

    //    printf("%s", buffer);
    //}

    //关闭了stdout了
    close(1);

    //fd == 1
    int fd = open("log.txt", O_CREAT | O_WRONLY | O_APPEND, 0666);
    //默认向显示器输出
    //库函数
    printf("fd: %d\n", fd);
    printf("hello bit\n");
    printf("hello bit\n");
    printf("hello bit\n");
    
    //刷新
    fflush(stdout);


    //系统调用write()
    const char *msg = "hello world\n";
    write(fd, msg, strlen(msg));

    close(fd);


    return 0;
}
